#include "blockQueue.hpp"
#include "threadPool.hpp"
#include <thread>
#include <cstdlib>
#include <iostream>
#include <unistd.h>
using namespace std;

// void Product(BlockQueue<int>* bq)
// {
//     while(true)
//     {
//         int t = rand() % 100;
//         bq->Push(t);
//         cout << "生产者生产了一个数据：" << t << endl;
//         sleep(1);
//     }
    
// }

// void Com(BlockQueue<int>* bq)
// {
//     while(true)
//     {
//         int t = 0;
//         bq->Pop(&t);
//         cout << "消费者消费了一个数据：" << t << endl;
//         sleep(1);
//     }
// }
// int main()
// {
//     srand(time(nullptr));
//     BlockQueue<int> bq;
//     thread t1(Product, &bq);
//     thread t2(Com, &bq);

//     t1.join();
//     t2.join();
//     return 0;
// }

// void CallBack(const int& val)
// {
//     cout << "消费者消费了一个任务：" << val << endl;
// }
// int main()
// {
//     srand(time(nullptr));
//     unique_ptr<ThreadPool<int>> ptr(new ThreadPool<int>(CallBack));
//     ptr->Init();
//     ptr->Start();
//     while(true)
//     {
//         int t = rand() % 100;
//         ptr->PushTask(t);
//         cout << "生产者生产了一个任务：" << t << endl;
//         sleep(1);
//     }
//     return 0;
// }

int main()
{
    srand(time(nullptr));
    ThreadPool<int>* ptr = ThreadPool<int>::GetInstance();
    while(true)
    {
        int val = rand() % 100;
        ptr->PushTask(val);
        cout << "生产者生产了一个任务：" << val << endl;
    }
    return 0;
}
